home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Ahoy 1985 July
/
Ahoy_Magazine_85-07_1985_Double_L.d64
/
fast song loader
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
3KB
|
120 lines
0 print"[147]":poke53280,9:poke53281,7:poke646,9
1 print " song loader":print:print
3 print" this is an example of how to load and use a song stored on disk";
5 print" using the program song maker."
6 rem
7 print" line 10 and line 9000 must execute before anything else in your";
8 print " program."
10 gosub 9000:goto 80
60 for ph=0 to es%:for n=1 to len(md$(ph)):sys mm
62 f$=fr$(n,ph)
65 sys m
67 for i=0 to du%(val(mid$(md$(ph),n,1))):next
68 rem sys mm:rem staccato notes
69 next:next
70 sys mm:return
80 print "[144]when song ends, press":print:print "shift to repeat song"
85 print "or q to quit"
100 if peek(653)<>0 then gosub 60:goto 100
110 if peek(203)=62 then poke 198,0:sys 65126
190 goto 100
8997 rem
8998 rem set up sound and load song
8999 rem
9000 f$="f":i=0:n=0:vc=0:m=848:mm=823:rem m & mm put ml in cassette buffer
9001 ph=0:dim g%(2),ad(2),du%(9),ak%(2),dy%(2),sn%(2),re%(2),wf%(2),pw%(2,1)
9007 rem
9008 rem open song file & get # of phrases and # of voices
9009 rem
9010 open 2,8,2,"0:song #1,s,r"
9015 input#2,es%,ev%,ld%
9017 rem
9018 rem dimension key variables
9019 rem
9020 dim fr$(ld%,es%),md$(es%)
9027 rem
9028 rem load the remainder of the variables from the song file
9029 rem
9030 for i=0 to 2:input#2,g%(i):next
9031 for i=0 to 2:input#2,ak%(i),dy%(i),sn%(i),re%(i)
9032 for n=0 to 1:input#2,pw%(i,n):next:next
9033 for i=0 to 9:input#2,du%(i):next
9034 for ph=0 to es%:input#2,md$(ph):for n=1 to len(md$(ph))
9035 for i=1 to 6:get#2,a$,b$
9036 if a$="" then a$=chr$(0)
9037 fr$(n,ph)=fr$(n,ph)+a$:next:next:next
9040 close 2
9041 rem
9042 rem set up envelopes
9043 rem
9044 for i=0 to 2:ad(i)=54277+7*i:next
9045 for i=0 to 2:poke ad(i),ak%(i) or dy%(i)
9046 poke ad(i)+1,sn%(i) or re%(i):next
9047 rem
9048 rem set pulse widths
9049 rem
9050 for i=0 to 2:vc=54274+i*7:for n=0 to 1
9051 poke vc+n,pw%(i,n):next:next
9066 rem
9067 rem set filter and volume
9068 rem filter frequency
9069 rem low byte (0-7) x%; high byte (0-255) y%
9070 x%=3:y%=150
9071 poke 54293,x%:poke 54294,y%
9072 rem filter on?
9073 rem voice 1 on=1; 2 on=2; 3 on=4; 1&2 on=3; 2&3 on=6; all on=7
9074 x%=0
9075 rem filter resonance
9076 rem peak volume (0=low, 15=high)
9077 y%=14
9078 y%=y%*16:poke 54295,x% or y%
9079 rem select filter type
9080 rem low-pass=1;band-pass=2;high-pass=4;lo-band=3;hi-band=6;all=7
9081 x%=1
9082 x%=x%*16
9083 rem
9084 rem select overall volume
9085 rem 15=high, 0=low
9086 y%=15
9087 poke 54296,x% or y%
9197 rem
9198 rem machine language routine at m
9199 rem
9218 rem find address of f$ and put it in zero page at 139, 140
9219 rem
9220 n=peek(45)+256*peek(46)+3:y%=n/256:x%=n-y%*256
9221 poke m,173:poke m+1,x%:poke m+2,y%:n=n+1:y%=n/256:x%=n-y%*256
9222 poke m+3,133:poke m+4,251:poke m+5,173:poke m+6,x%:poke m+7,y%
9223 poke m+8,133:poke m+9,252:poke m+10,160:poke m+11,0
9224 poke m+12,162:poke m+13,0
9228 rem
9229 rem get each pitch from f$ and put it in frequency register
9230 for i=m+14 to m+54 step 8:poke i,177:poke i+1,251
9231 poke i+2,157:poke i+3,0:poke i+4,212
9232 poke i+5,200:poke i+6,162:read a:poke i+7,a:next
9233 data 1,7,8,14,15,4
9238 rem
9239 rem gate each sound open
9240 n=0:for i=m+59 to m+71 step 6
9241 poke i,173:a=mm-3+n:y%=a/256:x%=a-256*y%:poke i+1,x%:poke i+2,y%
9242 poke i+3,141:read a:poke i+4,a:poke i+5,212:n=n+1:next
9243 data 4,11,18
9247 rem
9248 rem garbage collection
9250 for i=m+77 to m+90:read a:poke i,a:next
9255 data 164,52,165,51,105,6,144,1,200,133,51,132,52,96
9257 rem
9258 rem gate-off ml routine at mm
9259 rem
9260 for i=mm to mm+16 step 8
9261 poke i,173:y%=3:x%=34+(i-mm)/8:poke i+1,x%:poke i+2,y%:rem uses 820-822
9262 poke i+3,41:poke i+4,254
9263 poke i+5,141:read a:poke i+6,a:poke i+7,212:next:poke mm+24,96
9264 data 4,11,18
9267 rem
9268 rem set waveforms with gates off
9269 rem stored at 820-822--line 9261 requires this (820=hex 03 34)
9270 poke 820,g%(0):poke 821,g%(1):poke 822,g%(2):sys mm
9280 ph=0
9290 return